package com.youkeda.excise;

/**
 * @author CoderXshuai
 * @date 2020/7/17/0017 12:20
 */

public class Factorial {
    public static int factorial(int n) {
        //当 n = 1 时，递归结束
        if (n == 1) {
            return 1;
        }
        //把 factorial(n - 1) 的结果和 n 相乘，剩下的交给 factorial(n - 1) 来解决。
        return n * factorial(n - 1);
    }

    public static int fibonacci(int n) {
        if (n == 1 || n == 2) {
            return n;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }

    public static void hanoi(int n, int a, int b, int c) {
        if (n == 1) {
            System.out.println(a + "->" + c);
        } else {
            //先把n - 1 个盘子从A挪到B（B和C交换位置是因为在n - 1 个时候，B是目的地，C是过渡）
            hanoi(n - 1, a, c, b);
            //此时n - 1 个盘子已到达B，我们需要把A上仅存的那一块最大的放到C上
            System.out.println(a + "->" + c);
            //此时的问题变成把n - 1 个盘子在A为过渡的情况下从B到C
            hanoi(n - 1, b, a, c);
        }
    }
}
